package com.keepc.licence.util;

import de.schlichtherle.license.LicenseManager;
import de.schlichtherle.license.LicenseParam;

/**
 * 许可证管理器持有类，用于确保许可证管理器的单例模式。
 */
public class LicenseManagerHolder {

    // 使用volatile修饰，确保多线程环境下的可见性
    private static volatile LicenseManager LICENSE_MANAGER;

    /**
     * 获取许可证管理器的实例。
     * 如果尚未创建实例，则通过同步代码块确保只创建一个实例。
     * 这里使用了双重检查锁定（Double Checked Locking）模式来实现懒加载。
     * 
     * @param param 许可证参数，用于许可证管理器的初始化。
     * @return 返回许可证管理器的单例实例。
     */
    public static LicenseManager getInstance(LicenseParam param) {
        if (LICENSE_MANAGER == null) {
            synchronized (LicenseManagerHolder.class) {
                // 第二次检查，避免在同步块内不必要的锁定
                if (LICENSE_MANAGER == null) {
                    LICENSE_MANAGER = new CustomLicenseManager(param);
                }
            }
        }
        return LICENSE_MANAGER;
    }
}